package cn.com.idmy.auth;


import org.dromara.hutool.core.convert.ConvertUtil;
import org.dromara.hutool.core.util.ObjUtil;
import org.jetbrains.annotations.Nullable;

import java.lang.reflect.Type;

public interface GetValue {
    @Nullable Object get(String key);

    default @Nullable <T> T get(String key, Type type) {
        return ConvertUtil.convert(type, get(key));
    }

    default <T> T get(String key, T defaultValue) {
        return getValue(get(key), defaultValue);
    }

    default boolean has(String key) {
        return ObjUtil.isNotEmpty(get(key));
    }

    @SuppressWarnings("unchecked")
    default <T> T getValue(Object value, T defaultValue) {
        if (ObjUtil.isEmpty(value)) {
            return defaultValue;
        } else {
            return ConvertUtil.convert((Class<T>) defaultValue.getClass(), value);
        }
    }
}
